home *** CD-ROM | disk | FTP | other *** search
/ Softdisk Supreme / Softdisk Supreme.iso / pc / DSK Files / 0-49 / SD003b.dsk / GRADE.bas < prev    next >
BASIC Source File  |  2003-06-12  |  20KB  |  495 lines

  1. 4  REM ************************** 
  2. 5  REM <CTRL-J>        MODIFIED BY       <CTRL-J>       HARVEY  P  NELSON    <CTRL-J>          13 OCT 1981<CTRL-J>
  3. 8  REM **************************
  4. 10  DIM NM$(70),SU$(20),SG(70,20),H(20),HH(20),X(20),NK(70)
  5. 16 NW$ = " (WITHDRAWN)":WD$ = " (W)"
  6. 20 D$ =  CHR$(4):SW = 1: HOME 
  7. 21  PRINT D$"CATALOG"
  8. 22  PRINT : PRINT 
  9. 25 PQ = 0
  10. 30  PRINT  TAB( 6);"GRADES PROGRAM": PRINT : PRINT : PRINT 
  11. 35  INPUT "COURSE:     ";F$
  12. 41  IF  LEN(F$) = 0  THEN  END 
  13. 42  ONERR  GOTO 47
  14. 45  GOSUB 1850: POKE 216,0: GOTO 60
  15. 47  IF  PEEK(222) = 5  AND KK = 0  THEN  PRINT D$"DELETE"F$
  16. 48  POKE 216,0: HOME : PRINT "NO ";F$;" FILE": PRINT : PRINT "DO YOU WANT TO START ONE Y/N?";: GET A$: IF A$ < >"Y"  THEN  PRINT : GOTO 20
  17. 49  GOSUB 200
  18. 60  HOME : PRINT  TAB( 10)"TEST GRADEING PROGRAM"
  19. 62 TB = 20 - LEN(F$)/2: PRINT  TAB( TB)F$: PRINT 
  20. 65  IF PQ < >0  THEN  GOSUB 5600
  21. 70  PRINT "CHANGE NAME FILE" TAB( 23)"GRADE ROUTINES": PRINT 
  22. 75  PRINT " 'L'IST NAMES" TAB( 24)"'G'RADES LIST"
  23. 80  PRINT " 'A'DD NAMES" TAB( 24)"'E'NTER GRADES"
  24. 85  PRINT " 'D'ELETE NAMES" TAB( 24)"'M'ODIFY GRADES"
  25. 90  PRINT " 'C'CHANGE NAMES" TAB( 24)"'T'EST AVERAGE"
  26. 95  PRINT " 'W'ITHDRAWALS" TAB( 24)"'X'OUT LOW GRADE"
  27. 100  PRINT  TAB( 24)"'F'INAL GRADES"
  28. 105  PRINT  TAB( 24)"'R'ENAME TEST"
  29. 110  PRINT "SORT FILES" TAB( 24)"'K'ILL TEST": PRINT 
  30. 115  PRINT " 'S'TUDENT NAMES"
  31. 120  PRINT " 'O'N TEST AVERAGE" TAB( 23)"QUIT/UPDATE DISK"
  32. 125  PRINT 
  33. 130  PRINT  TAB( 24)"'Q'UIT"
  34. 135  PRINT : PRINT "ENTER CHOICE: ";: GET Q$: PRINT Q$;: CALL  -998: IF  ASC(Q$) = 13  THEN  CALL  -998
  35. 140 Q =  ASC(Q$) -64: IF Q <1  OR Q >26  THEN 135
  36. 150  ON Q GOSUB 230,160,460,370,520,1080,920,160,160,160,4910,1670,690,160,9000,160,1800,4500,3360,1330,160,160,9400,8000,160,160
  37. 155  GOTO 60
  38. 160  POP : GOTO 135
  39. 200  REM <CTRL-J>--INITIALIZATION<CTRL-J>
  40. 205  HOME : PRINT F$: VTAB 6: PRINT "INITIAL ENTRY OF CLASS LIST"
  41. 210 KK = 0: GOTO 240
  42. 230  REM <CTRL-J> --ADD STUDENT ROUTINE<CTRL-J>
  43. 235  HOME : PRINT F$: VTAB 6: PRINT "---ADD  STUDENT MODE"
  44. 240  PRINT "<RETURN> TO GO ON": PRINT : PRINT 
  45. 245  INPUT "      NAME ---   ";Q$
  46. 250  IF  LEN(Q$) = 0  OR Q$ = "ZZZ"  THEN  RETURN 
  47. 255  IF Q$ <"A"  THEN 230
  48. 260 KK = KK +1:NK(KK) = KK
  49. 265 NM$(KK) = Q$
  50. 267  FOR I = 0 TO ZZ:SG(KK,I) = 0: NEXT 
  51. 270 SW = 2: GOTO 245
  52. 370  REM <CTRL-J>--DELETE STUDENT ROUTINE
  53. 390  HOME : PRINT F$: VTAB 6: PRINT "---DELETE STUDENT MODE": PRINT "<RETURN> TO GO ON": PRINT : PRINT 
  54. 400  GOSUB 2630
  55. 437  FOR K = II TO KK:NM$(K) = NM$(K +1): FOR I = 0 TO ZZ:SG(K,I) = SG(K +1,I): NEXT : NEXT 
  56. 438  FOR K = 0 TO KK:NK(K) = K: NEXT 
  57. 440 KK = KK -1
  58. 450 SW = 2
  59. 455  GOTO 390
  60. 460  REM <CTRL-J>--NAME CHANGE ROUTINE<CTRL-J>
  61. 465  HOME : PRINT F$: VTAB 6: INVERSE : PRINT "--- NAME CHANGE MODE": NORMAL 
  62. 467  PRINT : PRINT "<RETURN> TO GO ON": PRINT : PRINT 
  63. 470  GOSUB 2630
  64. 480  PRINT : PRINT 
  65. 485  INPUT "NEW NAME IS ";Q$
  66. 490  IF  LEN(Q$) = 0  THEN  RETURN 
  67. 495  IF Q$ <"A"  THEN 465
  68. 500 SW = 2:NM$(II) = Q$
  69. 505  GOTO 465
  70. 520  REM <CTRL-J>--ENTER GRADE ROUTINE    
  71. 540  HOME : PRINT F$: VTAB 6: PRINT "---  ENTER GRADE MODE": PRINT : PRINT : PRINT 
  72. 550 ZZ = ZZ +1: PRINT "TEST ENDING WITH '.' WILL NOT BE DROPPEDBY REMOVEAL OF LOW SCORE ROUTINE": PRINT 
  73. 560  INPUT "ENTER TEST NAME --  ";SU$(ZZ)
  74. 565  IF  LEN(SU$(ZZ)) = 0  THEN  RETURN 
  75. 566  FOR I = 0 TO KK:SG(I,ZZ) = 0: NEXT 
  76. 570  FOR K = 1 TO KK:I = NK(K)
  77. 575  IF SG(I,1) < -63  THEN SG(I,ZZ) =  -1: GOTO 620
  78. 580  HOME : PRINT F$;"  ";SU$(ZZ): VTAB 6: PRINT "NAME"; TAB( 20)"GRADE": PRINT : PRINT 
  79. 590  PRINT NM$(I); TAB( 20);: INPUT SG(I,ZZ)
  80. 600  IF SG(I,ZZ) > -1  AND SG(I,ZZ) <101  THEN 620
  81. 610  PRINT : PRINT : FLASH : PRINT "GRADE NOT BETWEEN 0 AND 100": NORMAL : INPUT Q$: GOTO 580
  82. 620  NEXT :SW = 2: RETURN 
  83. 690  REM <CTRL-J>--CHANGE GRADE ROUTINE  
  84. 710  HOME : PRINT F$: VTAB 6: PRINT "---  CHANGE GRADE MODE ": PRINT : PRINT : PRINT 
  85. 720  GOSUB 2570
  86. 730  PRINT : PRINT : PRINT 
  87. 740  INPUT "ENTER CODE --   ";C
  88. 745  HOME : PRINT F$;" ";SU$(C): VTAB 6
  89. 750  GOSUB 2630
  90. 770 CT = 0
  91. 780  HOME : PRINT F$: VTAB 6
  92. 790  PRINT "NAME"; TAB( 15);NM$(II): PRINT 
  93. 800  PRINT "TEST NAME"; TAB( 15);SU$(C): PRINT 
  94. 810  PRINT "GRADE"; TAB( 15);SG(II,C): PRINT 
  95. 820  PRINT : PRINT 
  96. 830  IF CT >0  THEN 750
  97. 840 CT = CT +1
  98. 850  INPUT "ENTER CORRECT GRADE ";SG(II,C):SW = 2
  99. 870  GOTO 780
  100. 920  REM <CTRL-J>--LIST GRADE MODE<CTRL-J>
  101. 940  HOME : PRINT F$: VTAB 6: PRINT "---LIST GRADE MODE": PRINT : PRINT 
  102. 950  PRINT "CLASS OR INDIVIDUAL? ";: GET QQ$
  103. 960  IF QQ$ = "C"  THEN 1015
  104. 970  HOME : PRINT F$: VTAB 6: GOSUB 2630
  105. 985  IF PQ = 1  THEN  GOSUB 5500
  106. 990  IF II < >0  THEN  GOSUB 2750
  107. 1000  PRINT "--   ";: GET Q$: IF  ASC(Q$) = 27  THEN  RETURN 
  108. 1010  GOTO 970
  109. 1015  GOSUB 5700
  110. 1020  FOR K = 1 TO KK:I = NK(K)
  111. 1025  IF PQ = 1  THEN  GOSUB 5500
  112. 1030 II = I
  113. 1040  GOSUB 2750
  114. 1045  IF PQ = 1  AND QQ$ = "C"  THEN 1060
  115. 1050  PRINT "--   ";: GET Q$: IF  ASC(Q$) = 27  THEN  RETURN 
  116. 1055  IF Q$ = "ZZZ"  THEN K = 70
  117. 1060  NEXT 
  118. 1070  RETURN 
  119. 1080  REM <CTRL-J>--FINAL GRADE ROUTINE   
  120. 1085  FOR I = 15 TO 20:H(I) = 0:HH(I) = 0: NEXT 
  121. 1100  HOME : PRINT F$: VTAB 6: PRINT "--- FINAL GRADE MODE": PRINT : PRINT 
  122. 1110  GOSUB 2840
  123. 1120 SS = 100
  124. 1125  FOR J = 1 TO ZZ: FOR I = J TO ZZ:X(I) = SS/(ZZ -J +1): NEXT 
  125. 1130  HOME : PRINT F$: VTAB 6
  126. 1135  PRINT "CODE" TAB( 10)"TEST" TAB( 30)"WEIGHT": PRINT 
  127. 1140  FOR I = 1 TO ZZ: PRINT I TAB( 5)SU$(I) TAB( 30)X(I): NEXT : PRINT : PRINT "HIT <RETURN> IF OK"
  128. 1150  PRINT J TAB( 5)SU$(J) TAB( 30);: INPUT Q$: IF  LEN(Q$) < >0  THEN X(J) =  VAL(Q$)
  129. 1160 SS = SS -X(J)
  130. 1165  PRINT 
  131. 1170  NEXT 
  132. 1180  IF SS = 0  THEN 1200
  133. 1190  PRINT : PRINT : FLASH : PRINT "WEIGHTS MUST ADD UP TO 100": NORMAL : FOR I = 0 TO 2000: NEXT I: GOTO 1120
  134. 1200  PRINT "CLASS OR IND? ";: GET QQ$
  135. 1205  GOSUB 5700
  136. 1210  FOR K = 1 TO KK:I = NK(K)
  137. 1215  IF PQ = 1  THEN  PRINT : PRINT : PRINT 
  138. 1220 II = I:T$ = NM$(I)
  139. 1230  IF QQ$ < >"I"  THEN 1260
  140. 1240  GOSUB 2630
  141. 1255  IF PQ = 1  THEN  GOSUB 5500
  142. 1260  GOSUB 2750
  143. 1270  PRINT "-------------------------------------"
  144. 1280  GOSUB 2910: PRINT : GOSUB 3530
  145. 1285  IF Q$ < >"I"  AND PQ = 1  THEN 1300
  146. 1290  PRINT : PRINT "--    ";: GET Q$: IF  ASC(Q$) = 27  THEN  RETURN 
  147. 1295  IF Q$ = "ZZZ"  THEN K = 70
  148. 1300  NEXT : IF QQ$ = "I"  THEN  RETURN 
  149. 1310  GOSUB 4300: GOSUB 3000: GOSUB 3040
  150. 1315  VTAB 6: PRINT "SORT ON FINAL GRADE Y/N? ";: GET Q$: PRINT Q$: IF Q$ = "Y"  THEN  GOTO 9071
  151. 1320  RETURN 
  152. 1330  REM <CTRL-J>--CLASS AVERAGE ROUTINE   
  153. 1350  HOME : PRINT F$: VTAB 6: PRINT "CLASS AVERAGE MODE": PRINT : PRINT : PRINT 
  154. 1360  GOSUB 2570
  155. 1370  INPUT "ENTER CODE --   ";JJ
  156. 1375  IF JJ = 0  THEN  RETURN 
  157. 1380  IF JJ >ZZ  OR JJ <1  THEN  PRINT : PRINT : FLASH : PRINT "CODE MUST BE BETWEEN 1 AND  ";ZZ: NORMAL : GOTO 1360
  158. 1390 SM = 0:KX = KK:X1 = 1000:X2 =  -100
  159. 1395  FOR K = 1 TO 20:HH(K) = 0: NEXT 
  160. 1400  FOR K = 1 TO KK:I = NK(K)
  161. 1405  IF SG(I,1) < -63  THEN KX = KX -1: GOTO 1460
  162. 1410 XG = SG(I,JJ)
  163. 1420  IF XG =  -1  THEN KX = KX -1: GOTO 1460
  164. 1430  IF XG >X2  THEN X2 = XG
  165. 1440 SM = SM +XG
  166. 1450  IF XG <X1  THEN X1 = XG
  167. 1455 J =  INT(XG/5 +.99):HH(J) = HH(J) +1
  168. 1460  NEXT 
  169. 1470 AV = SM/KX
  170. 1480 SM = 0: FOR K = 1 TO KK:I = NK(K):XG = SG(I,JJ)
  171. 1490  IF XG =  -1  THEN 1510
  172. 1500 SM = SM +(XG -AV) *(XG -AV)
  173. 1510  NEXT 
  174. 1520 SM =  SQR(SM/KX)
  175. 1530 AV =  INT(AV *10 +0.5)/10:SM =  INT(SM *10 +0.5)/10
  176. 1535  GOSUB 5700
  177. 1540  HOME : PRINT F$: VTAB 6
  178. 1550  PRINT "COURSE :       ";F$: PRINT 
  179. 1560  PRINT "TEST NAME :    ";SU$(JJ): PRINT 
  180. 1570  PRINT "# OF STUDENTS :";KX: PRINT 
  181. 1580  PRINT "---------------------------------": PRINT 
  182. 1590  PRINT "CLASS AVERAGE  ";AV: PRINT 
  183. 1600  PRINT "STANDARD DEV.  ";SM: PRINT 
  184. 1610  PRINT "LOWEST  :      ";X1: PRINT 
  185. 1620  PRINT "HIGHEST  :     ";X2: PRINT : PRINT : PRINT : PRINT "HISTOGRAM Y/N? ";: GET Q$: PRINT Q$
  186. 1630  IF Q$ < >"N"  THEN 3040
  187. 1660  RETURN 
  188. 1670  REM <CTRL-J>--CLASS LIST ROUTINE      
  189. 1690 LI = 0
  190. 1700  PRINT : PRINT 
  191. 1710  FOR K = 1 TO KK:I = NK(K)
  192. 1720  IF LI = 0  THEN  HOME : VTAB 6: PRINT  TAB( 6);"--  CLASS LIST OF  ";F$;"  --"
  193. 1730  PRINT : PRINT "      ";NM$(I);: IF SG(I,1) =  < -63  THEN  PRINT NW$;
  194. 1735  PRINT 
  195. 1740 LI = LI +1
  196. 1750  IF LI <10  THEN 1770
  197. 1760 LI = 0: PRINT "--   ";: GET Q$: IF  ASC(Q$) = 27  THEN KK = 70
  198. 1770  NEXT 
  199. 1780  PRINT "--   ";: GET Q$
  200. 1790  RETURN 
  201. 1800  REM <CTRL-J>--EXIT PROGRAM ROUTINE  
  202. 1802  IF SX = 4  THEN  PRINT : PRINT "LOW SCORE HAS BEEN REPLACED WITH -1     SHOULD I UPDATE DISK? Y/N ";: GET Q$:SW = 3: IF Q$ = "Y"  THEN  PRINT : GOSUB 2180
  203. 1803  PRINT 
  204. 1810  IF SW = 2  THEN  GOSUB 2180
  205. 1811  IF SW = 2  OR SW = 3  THEN  PRINT "WANT A BACK-UP COPY Y/N? ";: GET Q$: PRINT : IF Q$ = "Y"  THEN  PRINT "PUT IN BACK-UP DISK ";: GET Q$: PRINT : GOSUB 2180: GOTO 1811
  206. 1820  PRINT "TYPE 'RUN' IF YOU WANT TO GRADE ANOTHER COURSE."
  207. 1830  END 
  208. 1850  REM <CTRL-J>--READ FILES SUBROUTINE
  209. 1860  HOME : PRINT F$: VTAB 6: FLASH : PRINT "READING GRADE FILE": NORMAL :ND = 0
  210. 1865  FOR I = 0 TO 70:NK(I) = I: NEXT 
  211. 1870  PRINT D$;"OPEN ";F$
  212. 1880  PRINT D$;"READ ";F$
  213. 1890  INPUT KK,ZZ
  214. 2120  FOR I = 0 TO ZZ: INPUT SU$(I): NEXT : FOR I = 1 TO KK: INPUT NM$(I): FOR J = 0 TO ZZ: INPUT SG(I,J): NEXT : NEXT 
  215. 2150  PRINT D$;"CLOSE ";F$
  216. 2160  HOME :SW = 1
  217. 2170  RETURN 
  218. 2180  REM <CTRL-J>-WRITE FILE SUBROUTINE 
  219. 2200  HOME : PRINT F$: VTAB 6: FLASH : PRINT "WRITING GRADE FILE": NORMAL 
  220. 2270  PRINT D$;"OPEN ";F$
  221. 2280  PRINT D$;"DELETE ";F$
  222. 2290  PRINT D$;"OPEN ";F$
  223. 2300  PRINT D$;"WRITE ";F$
  224. 2310  PRINT KK","ZZ
  225. 2420  FOR I = 0 TO ZZ: PRINT SU$(I): NEXT : FOR I = 1 TO KK: PRINT NM$(NK(I)): FOR J = 0 TO ZZ: PRINT SG(NK(I),J): NEXT : NEXT 
  226. 2550  PRINT D$;"CLOSE ";F$
  227. 2560  HOME : RETURN 
  228. 2570  REM <CTRL-J>--CODE-TEST DISPLAY       
  229. 2580  PRINT "CODE"; TAB( 16);"TEST": PRINT : PRINT 
  230. 2590  FOR I = 1 TO ZZ
  231. 2600  PRINT I; TAB( 15);SU$(I)
  232. 2610  NEXT I
  233. 2614  PRINT : PRINT : PRINT 
  234. 2620  RETURN 
  235. 2630  REM <CTRL-J>-NAME SEARCH SUBROUTINE 
  236. 2640  REM <CTRL-J>-RETURNS (II) OR "ZZZ"     
  237. 2650 II = 0
  238. 2660  INPUT "      NAME ---   ";T$
  239. 2670 LX =  LEN(T$)
  240. 2680  IF LX = 0  OR T$ = "ZZZ"  THEN  POP : RETURN 
  241. 2690  FOR I = 1 TO KK
  242. 2700  IF  LEFT$(NM$(I),LX) = T$  THEN II = I: PRINT : PRINT NM$(I);" Y/N?";: GET A$: IF A$ = "Y"  THEN I = 70: NEXT : RETURN 
  243. 2710  NEXT 
  244. 2720  PRINT : PRINT : FLASH : PRINT T$;"  NOT IN  ";F$: NORMAL 
  245. 2730  FOR I = 0 TO 1000: NEXT I: CALL  -998: CALL  -958: GOTO 2640
  246. 2740  RETURN 
  247. 2750  REM <CTRL-J>--GRADE DISPLAY ROUTINE   
  248. 2760  HOME : IF PQ < >1  THEN  PRINT F$
  249. 2765  VTAB 6
  250. 2770  PRINT NM$(II): PRINT : PRINT 
  251. 2780  PRINT "CODE"; TAB( 11);"TEST"; TAB( 30);"GRADE"
  252. 2790  PRINT "-------------------------------": PRINT 
  253. 2795 SG = SG(II,1): IF SG > -63  OR SG < -71  THEN 2800
  254. 2796 SG$ =  CHR$(0 -SG): PRINT "WITHDRAWN"; TAB( 30);"W";: IF SG < > -64  THEN  PRINT "-";SG$
  255. 2797  PRINT : GOTO 2822
  256. 2800  FOR Q = 1 TO ZZ
  257. 2810  PRINT Q; TAB( 10);SU$(Q); TAB( 30);: IF SG(II,Q) < > -1  THEN  PRINT SG(II,Q)
  258. 2815  IF SG(II,Q) =  -1  THEN  PRINT "N/A"
  259. 2820  NEXT Q
  260. 2821  IF PQ = 1  THEN 2830
  261. 2822  FOR P0 = 0 TO 5: PRINT : NEXT P0
  262. 2830  RETURN 
  263. 2840  REM <CTRL-J>--LETTER GRADE STANDARD          SUBROUTINE<CTRL-J>
  264. 2850  HOME : PRINT F$: VTAB 6: PRINT  TAB( 6);"--  LETTER GRADE STANDARDS  --": PRINT : PRINT 
  265. 2860  INPUT "   A GRADE --";H(1): PRINT 
  266. 2870  INPUT "   B GRADE --";H(2): PRINT 
  267. 2880  INPUT "   C GRADE --";H(3): PRINT 
  268. 2890  INPUT "   D GRADE --";H(4): PRINT 
  269. 2900  RETURN 
  270. 2910  REM <CTRL-J>-FINAL GRADE SUBROUTINE 
  271. 2920 TS = 0:SZ = 0
  272. 2925  IF SG(II,1) < -63  THEN FG = SG(II,1):SG(II,0) = 0: PRINT : PRINT : PRINT : PRINT NM$(II): PRINT : RETURN 
  273. 2930  FOR J = 1 TO ZZ
  274. 2940  IF SG(II,J) =  -1  THEN SZ = SZ +X(J): GOTO 2960
  275. 2950 TS = TS +SG(II,J) *X(J)
  276. 2960  NEXT 
  277. 2965 FG =  INT(TS/(100 -SZ) +.5)
  278. 2970 SG(II,0) = FG
  279. 2975 J =  INT(FG/5 +.99):HH(J) = HH(J) +1
  280. 2980  PRINT : PRINT : PRINT 
  281. 2985  PRINT NM$(II); TAB( 20);"AVERAGE :  ";: IF FG >0  THEN  PRINT FG
  282. 2990 SG(II,0) = FG: RETURN 
  283. 3000  REM <CTRL-J>--HISTOGRAM SUB A-F<CTRL-J>
  284. 3005 HI = 5:HJ = 7:HP = 3
  285. 3010 A$ = "      F      D      C      B      A"
  286. 3015  FOR I = 1 TO 5:J = 20 -I:H(I) = H(J): NEXT 
  287. 3020  GOTO 3165
  288. 3040  REM <CTRL-J>--HISTOGRAM SUBROUTINE  
  289. 3045 HI = 20:HJ = 2:HP = 0
  290. 3050 A$ = "    10  20  30  40  50  60  70  80  90"
  291. 3060  FOR I = 1 TO 20:H(I) = HH(I): NEXT 
  292. 3165 SM = 0: FOR I = 1 TO HI: IF SM <H(I)  THEN SM = H(I)
  293. 3166  NEXT :MG =  INT(35/SM)
  294. 3170  HOME : VTAB 20: GR : COLOR= 0
  295. 3180 P = HP:XC = 0
  296. 3185  PRINT A$: PRINT 
  297. 3190  FOR I = 1 TO HI
  298. 3200 XC = XC +1: IF XC = 16  THEN XC = 1
  299. 3220  COLOR= XC
  300. 3230 PP = 40 -H(I) *MG
  301. 3240  IF PP = 40  THEN P = P +HJ: GOTO 3300
  302. 3250  IF PP <0  THEN PP = 0
  303. 3260  FOR J = 1 TO HJ: VLIN 39,PP AT P:P = P +1: NEXT 
  304. 3300  NEXT 
  305. 3320  PRINT "MAGNIFICATION FACTOR = ";MG;: INPUT " NEW FACTOR? ";MG$:MG =  VAL(MG$)
  306. 3330  IF MG >0  AND MG <20  THEN 3170
  307. 3335  PRINT "DO YOU WANT TO PRINT HISTOGRAM Y/N? ";: GET Q$
  308. 3337  IF Q$ = "Y"  THEN  GOSUB 6000
  309. 3340  TEXT : HOME :
  310. 3350  RETURN 
  311. 3360  REM <CTRL-J>--NAME SORT SUBROUTINE  
  312. 3370  HOME : PRINT F$: VTAB 6: FLASH : PRINT "SORTING": NORMAL 
  313. 3380 NA$ = "A":NM$(0) = " "
  314. 3385  FOR I = 1 TO 70:NK(I) = I: NEXT 
  315. 3390  FOR J = 0 TO KK:NZ$ = "ZZ"
  316. 3400  FOR I = 1 TO KK
  317. 3410  IF NM$(I) = NA$  THEN NK(J) = I: FOR I = I +1 TO KK
  318. 3420  IF NM$(I) <NZ$  AND NM$(I) > = NA$  THEN NZ$ = NM$(I)
  319. 3430  NEXT : IF NA$ = NZ$  THEN 3450
  320. 3435 NA$ = NZ$: PRINT NM$(NK(J));: IF SG(NK(J),1) < -63  THEN  PRINT WD$;
  321. 3440  PRINT : NEXT : RETURN 
  322. 3450  PRINT NA$: PRINT NA$: PRINT "TWO NAME THE SAME": GET Q$: FOR I = 1 TO 70: NEXT : RETURN 
  323. 3530  REM <CTRL-J>--LETTER GRADE CONVER- SION        SUBROUTINE<CTRL-J>
  324. 3540  PRINT : PRINT  TAB( 20);"FINAL GRADE  :  ";
  325. 3541  IF FG > -63 GOTO 3550
  326. 3542  PRINT "W";:FG = 0 -SG(II,1): IF FG >64  AND FG <71  THEN  PRINT  CHR$(FG);
  327. 3543  PRINT : RETURN 
  328. 3550  IF FG > = H(1)  THEN H(15) = H(15) +1: PRINT "A": GOTO 3600
  329. 3560  IF FG > = H(2)  THEN H(16) = H(16) +1: PRINT "B": GOTO 3600
  330. 3570  IF FG > = H(3)  THEN H(17) = H(17) +1: PRINT "C": GOTO 3600
  331. 3580  IF FG > = H(4)  THEN H(18) = H(18) +1: PRINT "D": GOTO 3600
  332. 3590  PRINT "F":H(19) = H(19) +1
  333. 3600  RETURN 
  334. 3920  REM <CTRL-J>--COPY DATA FILES<CTRL-J>
  335. 3930  HOME : PRINT F$: VTAB 6: FLASH : PRINT "--- COPY DATA FILE MODE": NORMAL : PRINT 
  336. 3940 SA$ = F$
  337. 3950  INPUT "ENTER COURSE --    ";F$
  338. 3970  PRINT : PRINT "INSERT DISKETTE": PRINT 
  339. 3980  GOSUB 4210
  340. 3990  INPUT "PRESS RETURN TO READ FILE    ";Q$
  341. 4000  GOSUB 1850
  342. 4010  HOME : VTAB 6: PRINT "INSERT DISKETTE"
  343. 4020  GOSUB 4210
  344. 4030  INPUT "PRESS RETURN TO START COPY FILE";Q$
  345. 4040  GOSUB 2180
  346. 4050  INPUT "ANOTHER COPY OF SAME FILE ?(Y/N)  ";Q$
  347. 4060  IF Q$ = "Y"  THEN 4010
  348. 4070  INPUT "ANOTHER COUSE  ? (Y/N)  ";Q$
  349. 4080  IF Q$ = "Y"  THEN 3950
  350. 4090 F$ = SA$
  351. 4100  RETURN 
  352. 4210  REM <CTRL-J>--LIST CATALOG ROUTINE  
  353. 4220  PRINT : PRINT 
  354. 4230  PRINT "WANT TO SEE CATALOG Y/N? ";: GET Q$
  355. 4240  IF Q$ < >"Y"  THEN 4280
  356. 4250  HOME 
  357. 4260  PRINT D$;"CATALOG"
  358. 4270  PRINT "--    ";: GET Q$
  359. 4280  RETURN 
  360. 4300  REM <CTRL-J>--FINAL STATISTICS        
  361. 4310  HOME : PRINT F$: VTAB 3: PRINT "   FINAL  STATISTICS  "
  362. 4320  PRINT : PRINT 
  363. 4330  PRINT "GRADE"; TAB( 15);"NUMBER"
  364. 4340  PRINT "------------------------"
  365. 4350  PRINT "  A"; TAB( 15);H(15): PRINT 
  366. 4360  PRINT "  B"; TAB( 15);H(16): PRINT 
  367. 4370  PRINT "  C"; TAB( 15);H(17): PRINT 
  368. 4380  PRINT "  D"; TAB( 15);H(18): PRINT 
  369. 4390  PRINT "  F"; TAB( 15);H(19): PRINT 
  370. 4400 H(20) = H(15) +H(16) +H(17) +H(18) +H(19): PRINT 
  371. 4410  PRINT "--------------------"
  372. 4420  PRINT "TOTAL"; TAB( 15);H(20): PRINT : PRINT 
  373. 4430  INPUT "--     ";Q$
  374. 4440  RETURN 
  375. 4500  REM <CTRL-J>--TEST NAME CHANGE<CTRL-J>
  376. 4506  HOME : PRINT F$: VTAB 6
  377. 4510  PRINT "TEST NAME CHANGE MODE--"
  378. 4520  GOSUB 2570
  379. 4530  INPUT "ENTER CODE  ";C
  380. 4535  IF C = 0  OR C >ZZ  THEN  RETURN 
  381. 4540  HOME : PRINT F$: VTAB 6
  382. 4550  PRINT C,SU$(C): PRINT : PRINT 
  383. 4560  INPUT "ENTER CORRECT TEST TITLE ";Q$
  384. 4575  IF  LEN(Q$) = 0  THEN  RETURN 
  385. 4576 SU$(C) = Q$
  386. 4580 SW = 2: GOTO 4500
  387. 4700  REM <CTRL-J>-TEST NAME SORT UTILITY 
  388. 4710  IF SW = 0  THEN  GOSUB 1850
  389. 4720  HOME : PRINT F$: VTAB 6
  390. 4730  PRINT "TEST NAME SORT UTILITY"
  391. 4740  VTAB 15: FLASH : PRINT "PLEASE BE PATIENT": NORMAL 
  392. 4750 P = ZZ -1
  393. 4760 F = 0
  394. 4770  FOR J = 1 TO P
  395. 4780  IF SU$(J) < = SU$(J +1)  THEN 4840
  396. 4790 F = 1
  397. 4800 T$ = SU$(J):SU$(J) = SU$(J +1):SU$(J +1) = T$
  398. 4810  FOR I = 1 TO KK
  399. 4820 FG = SG(I,J):SG(I,J) = SG(I,J +1):SG(I,J +1) = FG
  400. 4830  NEXT I
  401. 4840  NEXT J
  402. 4844 P = P -1
  403. 4850  IF F = 1  THEN 4760
  404. 4855 SW = 2
  405. 4860  RETURN 
  406. 4900  REM 
  407. 4910  REM <CTRL-J>--DELETE TEST ROUTINE      
  408. 4920  REM 
  409. 4940  HOME : PRINT F$: VTAB 6: PRINT "--DELETE TEST UTILITY--"
  410. 4960  GOSUB 2570: INPUT "ENTER CODE  ";C
  411. 4965  IF C = 0  OR C >ZZ  THEN  RETURN 
  412. 4970  HOME : VTAB 6: PRINT "DELETING  ";SU$(C)
  413. 4980 P = ZZ -1
  414. 4990  FOR J = C TO P:SU$(J) = SU$(J +1)
  415. 5010  FOR I = 1 TO KK:SG(I,J) = SG(I,J +1)
  416. 5040  NEXT I: NEXT J
  417. 5045 ZZ = P:SW = 2
  418. 5080  RETURN 
  419. 5500  REM <CTRL-J>--PRINTER ON SUBROUTINE  
  420. 5510  PR# 1: PRINT ""
  421. 5520  REM <CTRL-J> ENTER YOUR OWN PRINTER ROUTINE HERE<CTRL-J>
  422. 5530  RETURN 
  423. 5600  REM <CTRL-J>-PRINTER OFF SUBROUTINE 
  424. 5610  PR# 0
  425. 5620  RETURN 
  426. 5700  REM <CTRL-J>--SET PRINTER MODE<CTRL-J>
  427. 5710  PRINT : PRINT 
  428. 5720  PRINT "HARD COPY Y/N? ";: GET P$: PRINT P$
  429. 5730  IF P$ = "Y"  THEN PQ = 1: GOTO 5500
  430. 5740  RETURN 
  431. 5800  PRINT "--  ";: GET Q$: IF  ASC(Q$) = 27  THEN  POP : RETURN 
  432. 6000  REM <CTRL-J>--LORES HISTOGRAM PRINT    
  433. 6030 CO$ = " ": GOTO 6210
  434. 6040  INPUT "PRINTER SLOT ?";SLOT$
  435. 6050  PRINT D$;"PR#"; VAL(SLOT$)
  436. 6055  POKE 1785,132
  437. 6060  PRINT : PRINT 
  438. 6070  FOR I = 0 TO 39
  439. 6080  FOR J = 0 TO 39
  440. 6090 S% =  SCRN( J,I)
  441. 6100 CH$ =  MID$ (CO$,S% +1,1)
  442. 6110  PRINT CH$;
  443. 6120  NEXT J: PRINT 
  444. 6130  NEXT I
  445. 6140  RESTORE 
  446. 6200  PRINT D$;"PR#0": RETURN 
  447. 6210 CO$ = "#%&?*<!:@;<.+,/ "
  448. 6220  GOTO 6040
  449. 8000  REM <CTRL-J>REMOVE LOW SCORE<CTRL-J>
  450. 8003  HOME : PRINT F$: VTAB 6
  451. 8006  PRINT : PRINT "LOW TEST SCORE WILL BE REPLACED WITH -1 THIS REMOVES THE GRADE FROM THE AVERAGE"
  452. 8007  PRINT : PRINT "SHOULD I UPDATE DISK FIRST? Y/N ";: GET Q$
  453. 8008  IF Q$ = "Y"  THEN  GOSUB 2180
  454. 8009  PRINT : PRINT : PRINT "I'M DOING IT  I'M DOING IT"
  455. 8010  FOR K = 1 TO KK:I = NK(K)
  456. 8015  IF SG(I,1) < -63  THEN  NEXT : GOTO 8050
  457. 8020 JJ = 1
  458. 8025  IF  RIGHT$(SU$(JJ),1) = "."  THEN JJ = JJ +1: GOTO 8025
  459. 8030  FOR J = JJ +1 TO ZZ: IF  RIGHT$(SU$(J),1) < >"."  AND SG(I,J) <SG(I,JJ)  THEN JJ = J
  460. 8035  NEXT 
  461. 8040 SG(I,JJ) =  -1: NEXT 
  462. 8050 SX = 4: RETURN 
  463. 9000  REM <CTRL-J>SORT ON GRADE AVERAGE<CTRL-J>
  464. 9010  PRINT : PRINT "ONE MOMENT PLEASE"
  465. 9015  PRINT "COMPUTING AVERAGES"
  466. 9020  FOR I = 1 TO KK
  467. 9030 SG(I,0) = 0:JJ = 0
  468. 9035  IF SG(I,1) < -63  AND SG(I,1) > -71  THEN SG(I,0) = 0: NEXT : GOTO 9072
  469. 9040  FOR J = 1 TO ZZ
  470. 9050  IF SG(I,J) =  -1  THEN JJ = JJ +1: GOTO 9070
  471. 9060 SG(I,0) = SG(I,0) +SG(I,J)
  472. 9070  NEXT :SG(I,0) =  INT((SG(I,0)/(ZZ -JJ)) +.5): NEXT 
  473. 9071  REM <CTRL-J>--SORT ON SG(0,KK)<CTRL-J>
  474. 9072  PRINT : GOSUB 5700
  475. 9075 AK = 101
  476. 9080  FOR J = 0 TO KK:AZ =  -101
  477. 9090  FOR I = 1 TO KK
  478. 9100  IF SG(I,0) = AK  THEN NK(J) = I: PRINT SG(I,0); TAB( 5);NM$(I):SG(I,0) = SG(I,0) -101: FOR I = I +1 TO KK
  479. 9110  IF SG(I,0) >AZ  AND SG(I,0) < = AK  THEN AZ = SG(I,0)
  480. 9120  NEXT : IF AZ <0  THEN J = 70
  481. 9125 AK = AZ: NEXT J: GOSUB 5600
  482. 9130  PRINT "HIT ANY KEY TO CONTINUE";: GET Q$: RETURN 
  483. 9400  REM <CTRL-J>--STUDENT WITHDRAWAL<CTRL-J>
  484. 9410  HOME : PRINT F$: VTAB 6: PRINT "---STUDENT WITHDRAWAL MODE": PRINT "<RETURN> TO GO ON": PRINT : PRINT 
  485. 9420  GOSUB 2630
  486. 9440  PRINT : PRINT : INPUT "ENTER W GRADE 0 OR A-F ";Q$: IF  LEFT$(Q$,1) = "W"  THEN Q$ =  RIGHT$(Q$,1): IF Q$ = "W"  THEN Q$ = "0"
  487. 9445  IF  LEN(Q$) = 0  THEN  RETURN 
  488. 9446  IF Q$ = "0"  THEN Q$ =  CHR$(64)
  489. 9460  IF  ASC(Q$) <64  OR  ASC(Q$) >70  THEN  RETURN 
  490. 9465 SW = 2
  491. 9470 Q =  ASC(Q$): IF Q >63  AND Q <71  THEN SG(II,1) = 0 -Q: FOR I = 2 TO ZZ:SG(II,I) =  -1: NEXT : GOTO 9400
  492. 10000  REM   ORIGINALLY THIS PROGRAM
  493. 10010  REM   IS FROM OCTOBER 1981 MAGAZINE
  494. 10020  REM  PAGE 166 OF 'CREATIVE COMPUTING'
  495. 10030  REM  BY DR. W. TEOH, PURDUE UNIVERSITY